#pragma once
#include <CPPDiffusion2DADI.h>

namespace VCPPDiffusion2D {
	using namespace System;

	public ref class VCPPDiffusion2DADI {
	private:
		CPPDiffusion2DADI * m_impl;
	protected:
		!VCPPDiffusion2DADI() {
			delete m_impl;
		}
	public:
		VCPPDiffusion2DADI() {
			m_impl = new CPPDiffusion2DADI();
		};
		~VCPPDiffusion2DADI() {
			this->!VCPPDiffusion2DADI();
		}
		property double BoundaryCondition {
			double get() { return m_impl->BoundaryCondition();}
			void set(double bc) { m_impl->BoundaryCondition(bc);}
		};
		property int NumberOfNodesInX {
			int get() { return m_impl->NumberOfNodesInX(); }
			void set(int nx) { m_impl->NumberOfNodesInX(nx);}
		};
		property int NumberOfNodesInY {
			int get() { return m_impl->NumberOfNodesInY();}
			void set(int ny) {m_impl->NumberOfNodesInY(ny);}
		};
		property double DeltaX {
			double get() { return m_impl->DeltaX();}
			void set(double deltax) { m_impl->DeltaX(deltax);}
		};
		property double DeltaY {
			double get() { return m_impl->DeltaY();}
			void set(double deltay) { m_impl->DeltaY(deltay);}
		};
		property double DeltaT {
			double get() { return m_impl->DeltaT();}
			void set(double deltat) { m_impl->DeltaT(deltat);}
		};
		property double Alpha {
			double get() { return m_impl->Alpha();}
			void set(double alpha) { m_impl->Alpha(alpha);}
		};
		void NextStep(array<double> ^ u) {
			pin_ptr<double> ptr = &(u[0]);
			m_impl->NextStep(ptr);
		}
	};

}